package com.wbase.base.file

import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import androidx.core.content.FileProvider
import com.wbase.base.app.App
import com.wbase.base.utils.PackageUtils
import java.io.File

object FileProviderUtils {
    val AUTHORITIES: String = PackageUtils.getPackageName(App.getContext())
        .toString() + ".file.AndroidFileProvider"

    /**
     * 获取文件的Uri
     * @param context context
     * @param file 要获取uri的File对象
     * @return 文件uri对象
     */
    fun getUriForFile(context: Context?, file: File?): Uri? {
        var fileUri: Uri? = null
        fileUri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            getUriForFile24(context, file)
        } else {
            Uri.fromFile(file)
        }
        return fileUri
    }

    /**
     * 获取7.0以后的文件的路径
     *
     * @param context context
     * @param file    file
     * @return 文件的Uri
     */
    fun getUriForFile24(context: Context?, file: File?): Uri? {
        if(context == null){
            return null
        }
        return FileProvider.getUriForFile(context, AUTHORITIES, file!!)
    }

    /**
     * 如果文件需要给其他应用程序使用，需要调用此方法设置权限
     * @param context context
     * @param intent intent
     * @param type mimeType（比如安装文件使用application/vnd.android.package-archive）
     * @param file 文件
     * @param writeAble 是否允许修改或者写入
     */
    fun setIntentDataAndType(context: Context?, intent: Intent, type: String?, file: File?, writeAble: Boolean) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            intent.setDataAndType(getUriForFile(context, file), type)
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            if (writeAble) {
                intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
            }
        } else {
            intent.setDataAndType(Uri.fromFile(file), type)
        }
    }

    fun setIntentPermission(
        intent: Intent,
        readAble: Boolean,
        writeAble: Boolean) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            if (readAble) {
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            }
            if (writeAble) {
                intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
            }
        }
    }
}